Back to the main page

Data Visualization

We will first load up the tidyverse since we will be using the dplyr, ggplot, and readr packages.

library(tidyverse)

read in data

brauer <- read_csv("Data/brauer2007_tidy.csv")
## Parsed with column specification:
## cols(
##   symbol = col_character(),
##   systematic_name = col_character(),
##   nutrient = col_character(),
##   rate = col_double(),
##   expression = col_double(),
##   bp = col_character(),
##   mf = col_character()
## )

We are going to make a smaller version of this data, for time sake

brauer <- brauer[seq(1, nrow(brauer), 5), ]
gm <- read_csv("Data/gapminder.csv")
## Parsed with column specification:
## cols(
##   country_id = col_double(),
##   country = col_character(),
##   continent = col_character(),
##   year = col_double(),
##   lifeexp = col_double(),
##   population = col_double(),
##   gdpPercap = col_double(),
##   trans_deaths = col_double(),
##   resp_deaths = col_double(),
##   ext_deaths = col_double(),
##   total_perthou = col_double(),
##   death_cat = col_character()
## )

Refreshing skills from last week

DPLYR

filter – select certain rows

Just do a quick filter.

head(filter(brauer, symbol == "SFB2"))
## # A tibble: 5 x 7
##   symbol systematic_name nutrient  rate expression bp          mf          
##   <chr>  <chr>           <chr>    <dbl>      <dbl> <chr>       <chr>       
## 1 SFB2   YNL049C         Glucose   0.05      -0.24 ER to Golg~ molecular f~
## 2 SFB2   YNL049C         Ammonia   0.3        0.09 ER to Golg~ molecular f~
## 3 SFB2   YNL049C         Sulfate   0.15       0.09 ER to Golg~ molecular f~
## 4 SFB2   YNL049C         Uracil    0.2       -0.28 ER to Golg~ molecular f~
## 5 SFB2   YNL049C         Uracil    0.3        0.09 ER to Golg~ molecular f~
head(filter(brauer, expression < 0 & symbol == "SFB2"))
## # A tibble: 2 x 7
##   symbol systematic_name nutrient  rate expression bp          mf          
##   <chr>  <chr>           <chr>    <dbl>      <dbl> <chr>       <chr>       
## 1 SFB2   YNL049C         Glucose   0.05      -0.24 ER to Golg~ molecular f~
## 2 SFB2   YNL049C         Uracil    0.2       -0.28 ER to Golg~ molecular f~
#THE PIPE
brauer %>% 
  filter(symbol == "SFB2")  %>% 
  head()
## # A tibble: 5 x 7
##   symbol systematic_name nutrient  rate expression bp          mf          
##   <chr>  <chr>           <chr>    <dbl>      <dbl> <chr>       <chr>       
## 1 SFB2   YNL049C         Glucose   0.05      -0.24 ER to Golg~ molecular f~
## 2 SFB2   YNL049C         Ammonia   0.3        0.09 ER to Golg~ molecular f~
## 3 SFB2   YNL049C         Sulfate   0.15       0.09 ER to Golg~ molecular f~
## 4 SFB2   YNL049C         Uracil    0.2       -0.28 ER to Golg~ molecular f~
## 5 SFB2   YNL049C         Uracil    0.3        0.09 ER to Golg~ molecular f~

PART 1.99 - PLOTTING in Base R

plot(gm$lifeexp, gm$gdpPercap)

note about qplot: Encompasses many options and defaults, but not as flexible as ggplot.

qplot(data = gm, x = continent, y = lifeexp, geom = "boxplot")

ggplot2

geom – plot type (point, bar, histogram, etc.) aesthetics – variables mapped onto plot (axes and size, shape, color etc) stat – statistical summary or transform in plot facets – way to slice data on certain variable

Two Continous Variables

Point, jitter, quantile, smooth, etc.

This will create a blank canvas to add layers upon.

ggplot()

data = gm uses the gm dataset and a call to aes indicates the variables to be used. However, the graph will still be empty until we specify the type of graph to use.

ggplot(data = gm, aes(x = gdpPercap, y = lifeexp))

Add the geom (plot type), which will be point. (Essentially a scatter plot)

ggplot(data = gm, aes(x = gdpPercap, y = lifeexp)) + geom_point()

Save the canvas to a variable

p <- ggplot(gm, aes(x = gdpPercap, y = lifeexp))
p

You can then slowly add on each layer, starting with adding the point geom to p

p <- p + geom_point()
  p

You can also go ahead and test out other ggplot options Let’s try to use one of the scaling functions. (check ggplot2 cheatsheet for other scale options)

p + scale_x_log10()

p + scale_x_sqrt()

#I think the log10() looks nice, lets make sure we save this back to p
p <- p + scale_x_log10()
p

This graph looks ok, but it could use something else. You can use an option within the geom_point function to color the individual points by different values within the data. Example: Coloring the points by continent.

p + geom_point(aes(color = continent))

The aes wrapper allows for the color to differentiate based upon variable values.

Without wrapping the color option in an aes call, the color can be applied in a blanket way across all points.

p + geom_point(color = "blue")

Here are a list of colors that are available in R. Put any of those in the color = “color” and it will change the color.

colors()
##   [1] "white"                "aliceblue"            "antiquewhite"        
##   [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
##   [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
##  [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
##  [13] "azure"                "azure1"               "azure2"              
##  [16] "azure3"               "azure4"               "beige"               
##  [19] "bisque"               "bisque1"              "bisque2"             
##  [22] "bisque3"              "bisque4"              "black"               
##  [25] "blanchedalmond"       "blue"                 "blue1"               
##  [28] "blue2"                "blue3"                "blue4"               
##  [31] "blueviolet"           "brown"                "brown1"              
##  [34] "brown2"               "brown3"               "brown4"              
##  [37] "burlywood"            "burlywood1"           "burlywood2"          
##  [40] "burlywood3"           "burlywood4"           "cadetblue"           
##  [43] "cadetblue1"           "cadetblue2"           "cadetblue3"          
##  [46] "cadetblue4"           "chartreuse"           "chartreuse1"         
##  [49] "chartreuse2"          "chartreuse3"          "chartreuse4"         
##  [52] "chocolate"            "chocolate1"           "chocolate2"          
##  [55] "chocolate3"           "chocolate4"           "coral"               
##  [58] "coral1"               "coral2"               "coral3"              
##  [61] "coral4"               "cornflowerblue"       "cornsilk"            
##  [64] "cornsilk1"            "cornsilk2"            "cornsilk3"           
##  [67] "cornsilk4"            "cyan"                 "cyan1"               
##  [70] "cyan2"                "cyan3"                "cyan4"               
##  [73] "darkblue"             "darkcyan"             "darkgoldenrod"       
##  [76] "darkgoldenrod1"       "darkgoldenrod2"       "darkgoldenrod3"      
##  [79] "darkgoldenrod4"       "darkgray"             "darkgreen"           
##  [82] "darkgrey"             "darkkhaki"            "darkmagenta"         
##  [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"     
##  [88] "darkolivegreen3"      "darkolivegreen4"      "darkorange"          
##  [91] "darkorange1"          "darkorange2"          "darkorange3"         
##  [94] "darkorange4"          "darkorchid"           "darkorchid1"         
##  [97] "darkorchid2"          "darkorchid3"          "darkorchid4"         
## [100] "darkred"              "darksalmon"           "darkseagreen"        
## [103] "darkseagreen1"        "darkseagreen2"        "darkseagreen3"       
## [106] "darkseagreen4"        "darkslateblue"        "darkslategray"       
## [109] "darkslategray1"       "darkslategray2"       "darkslategray3"      
## [112] "darkslategray4"       "darkslategrey"        "darkturquoise"       
## [115] "darkviolet"           "deeppink"             "deeppink1"           
## [118] "deeppink2"            "deeppink3"            "deeppink4"           
## [121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"        
## [124] "deepskyblue3"         "deepskyblue4"         "dimgray"             
## [127] "dimgrey"              "dodgerblue"           "dodgerblue1"         
## [130] "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
## [133] "firebrick"            "firebrick1"           "firebrick2"          
## [136] "firebrick3"           "firebrick4"           "floralwhite"         
## [139] "forestgreen"          "gainsboro"            "ghostwhite"          
## [142] "gold"                 "gold1"                "gold2"               
## [145] "gold3"                "gold4"                "goldenrod"           
## [148] "goldenrod1"           "goldenrod2"           "goldenrod3"          
## [151] "goldenrod4"           "gray"                 "gray0"               
## [154] "gray1"                "gray2"                "gray3"               
## [157] "gray4"                "gray5"                "gray6"               
## [160] "gray7"                "gray8"                "gray9"               
## [163] "gray10"               "gray11"               "gray12"              
## [166] "gray13"               "gray14"               "gray15"              
## [169] "gray16"               "gray17"               "gray18"              
## [172] "gray19"               "gray20"               "gray21"              
## [175] "gray22"               "gray23"               "gray24"              
## [178] "gray25"               "gray26"               "gray27"              
## [181] "gray28"               "gray29"               "gray30"              
## [184] "gray31"               "gray32"               "gray33"              
## [187] "gray34"               "gray35"               "gray36"              
## [190] "gray37"               "gray38"               "gray39"              
## [193] "gray40"               "gray41"               "gray42"              
## [196] "gray43"               "gray44"               "gray45"              
## [199] "gray46"               "gray47"               "gray48"              
## [202] "gray49"               "gray50"               "gray51"              
## [205] "gray52"               "gray53"               "gray54"              
## [208] "gray55"               "gray56"               "gray57"              
## [211] "gray58"               "gray59"               "gray60"              
## [214] "gray61"               "gray62"               "gray63"              
## [217] "gray64"               "gray65"               "gray66"              
## [220] "gray67"               "gray68"               "gray69"              
## [223] "gray70"               "gray71"               "gray72"              
## [226] "gray73"               "gray74"               "gray75"              
## [229] "gray76"               "gray77"               "gray78"              
## [232] "gray79"               "gray80"               "gray81"              
## [235] "gray82"               "gray83"               "gray84"              
## [238] "gray85"               "gray86"               "gray87"              
## [241] "gray88"               "gray89"               "gray90"              
## [244] "gray91"               "gray92"               "gray93"              
## [247] "gray94"               "gray95"               "gray96"              
## [250] "gray97"               "gray98"               "gray99"              
## [253] "gray100"              "green"                "green1"              
## [256] "green2"               "green3"               "green4"              
## [259] "greenyellow"          "grey"                 "grey0"               
## [262] "grey1"                "grey2"                "grey3"               
## [265] "grey4"                "grey5"                "grey6"               
## [268] "grey7"                "grey8"                "grey9"               
## [271] "grey10"               "grey11"               "grey12"              
## [274] "grey13"               "grey14"               "grey15"              
## [277] "grey16"               "grey17"               "grey18"              
## [280] "grey19"               "grey20"               "grey21"              
## [283] "grey22"               "grey23"               "grey24"              
## [286] "grey25"               "grey26"               "grey27"              
## [289] "grey28"               "grey29"               "grey30"              
## [292] "grey31"               "grey32"               "grey33"              
## [295] "grey34"               "grey35"               "grey36"              
## [298] "grey37"               "grey38"               "grey39"              
## [301] "grey40"               "grey41"               "grey42"              
## [304] "grey43"               "grey44"               "grey45"              
## [307] "grey46"               "grey47"               "grey48"              
## [310] "grey49"               "grey50"               "grey51"              
## [313] "grey52"               "grey53"               "grey54"              
## [316] "grey55"               "grey56"               "grey57"              
## [319] "grey58"               "grey59"               "grey60"              
## [322] "grey61"               "grey62"               "grey63"              
## [325] "grey64"               "grey65"               "grey66"              
## [328] "grey67"               "grey68"               "grey69"              
## [331] "grey70"               "grey71"               "grey72"              
## [334] "grey73"               "grey74"               "grey75"              
## [337] "grey76"               "grey77"               "grey78"              
## [340] "grey79"               "grey80"               "grey81"              
## [343] "grey82"               "grey83"               "grey84"              
## [346] "grey85"               "grey86"               "grey87"              
## [349] "grey88"               "grey89"               "grey90"              
## [352] "grey91"               "grey92"               "grey93"              
## [355] "grey94"               "grey95"               "grey96"              
## [358] "grey97"               "grey98"               "grey99"              
## [361] "grey100"              "honeydew"             "honeydew1"           
## [364] "honeydew2"            "honeydew3"            "honeydew4"           
## [367] "hotpink"              "hotpink1"             "hotpink2"            
## [370] "hotpink3"             "hotpink4"             "indianred"           
## [373] "indianred1"           "indianred2"           "indianred3"          
## [376] "indianred4"           "ivory"                "ivory1"              
## [379] "ivory2"               "ivory3"               "ivory4"              
## [382] "khaki"                "khaki1"               "khaki2"              
## [385] "khaki3"               "khaki4"               "lavender"            
## [388] "lavenderblush"        "lavenderblush1"       "lavenderblush2"      
## [391] "lavenderblush3"       "lavenderblush4"       "lawngreen"           
## [394] "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
## [397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"           
## [400] "lightblue1"           "lightblue2"           "lightblue3"          
## [403] "lightblue4"           "lightcoral"           "lightcyan"           
## [406] "lightcyan1"           "lightcyan2"           "lightcyan3"          
## [409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"     
## [412] "lightgoldenrod2"      "lightgoldenrod3"      "lightgoldenrod4"     
## [415] "lightgoldenrodyellow" "lightgray"            "lightgreen"          
## [418] "lightgrey"            "lightpink"            "lightpink1"          
## [421] "lightpink2"           "lightpink3"           "lightpink4"          
## [424] "lightsalmon"          "lightsalmon1"         "lightsalmon2"        
## [427] "lightsalmon3"         "lightsalmon4"         "lightseagreen"       
## [430] "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
## [433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"      
## [436] "lightslategray"       "lightslategrey"       "lightsteelblue"      
## [439] "lightsteelblue1"      "lightsteelblue2"      "lightsteelblue3"     
## [442] "lightsteelblue4"      "lightyellow"          "lightyellow1"        
## [445] "lightyellow2"         "lightyellow3"         "lightyellow4"        
## [448] "limegreen"            "linen"                "magenta"             
## [451] "magenta1"             "magenta2"             "magenta3"            
## [454] "magenta4"             "maroon"               "maroon1"             
## [457] "maroon2"              "maroon3"              "maroon4"             
## [460] "mediumaquamarine"     "mediumblue"           "mediumorchid"        
## [463] "mediumorchid1"        "mediumorchid2"        "mediumorchid3"       
## [466] "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
## [469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"       
## [472] "mediumseagreen"       "mediumslateblue"      "mediumspringgreen"   
## [475] "mediumturquoise"      "mediumvioletred"      "midnightblue"        
## [478] "mintcream"            "mistyrose"            "mistyrose1"          
## [481] "mistyrose2"           "mistyrose3"           "mistyrose4"          
## [484] "moccasin"             "navajowhite"          "navajowhite1"        
## [487] "navajowhite2"         "navajowhite3"         "navajowhite4"        
## [490] "navy"                 "navyblue"             "oldlace"             
## [493] "olivedrab"            "olivedrab1"           "olivedrab2"          
## [496] "olivedrab3"           "olivedrab4"           "orange"              
## [499] "orange1"              "orange2"              "orange3"             
## [502] "orange4"              "orangered"            "orangered1"          
## [505] "orangered2"           "orangered3"           "orangered4"          
## [508] "orchid"               "orchid1"              "orchid2"             
## [511] "orchid3"              "orchid4"              "palegoldenrod"       
## [514] "palegreen"            "palegreen1"           "palegreen2"          
## [517] "palegreen3"           "palegreen4"           "paleturquoise"       
## [520] "paleturquoise1"       "paleturquoise2"       "paleturquoise3"      
## [523] "paleturquoise4"       "palevioletred"        "palevioletred1"      
## [526] "palevioletred2"       "palevioletred3"       "palevioletred4"      
## [529] "papayawhip"           "peachpuff"            "peachpuff1"          
## [532] "peachpuff2"           "peachpuff3"           "peachpuff4"          
## [535] "peru"                 "pink"                 "pink1"               
## [538] "pink2"                "pink3"                "pink4"               
## [541] "plum"                 "plum1"                "plum2"               
## [544] "plum3"                "plum4"                "powderblue"          
## [547] "purple"               "purple1"              "purple2"             
## [550] "purple3"              "purple4"              "red"                 
## [553] "red1"                 "red2"                 "red3"                
## [556] "red4"                 "rosybrown"            "rosybrown1"          
## [559] "rosybrown2"           "rosybrown3"           "rosybrown4"          
## [562] "royalblue"            "royalblue1"           "royalblue2"          
## [565] "royalblue3"           "royalblue4"           "saddlebrown"         
## [568] "salmon"               "salmon1"              "salmon2"             
## [571] "salmon3"              "salmon4"              "sandybrown"          
## [574] "seagreen"             "seagreen1"            "seagreen2"           
## [577] "seagreen3"            "seagreen4"            "seashell"            
## [580] "seashell1"            "seashell2"            "seashell3"           
## [583] "seashell4"            "sienna"               "sienna1"             
## [586] "sienna2"              "sienna3"              "sienna4"             
## [589] "skyblue"              "skyblue1"             "skyblue2"            
## [592] "skyblue3"             "skyblue4"             "slateblue"           
## [595] "slateblue1"           "slateblue2"           "slateblue3"          
## [598] "slateblue4"           "slategray"            "slategray1"          
## [601] "slategray2"           "slategray3"           "slategray4"          
## [604] "slategrey"            "snow"                 "snow1"               
## [607] "snow2"                "snow3"                "snow4"               
## [610] "springgreen"          "springgreen1"         "springgreen2"        
## [613] "springgreen3"         "springgreen4"         "steelblue"           
## [616] "steelblue1"           "steelblue2"           "steelblue3"          
## [619] "steelblue4"           "tan"                  "tan1"                
## [622] "tan2"                 "tan3"                 "tan4"                
## [625] "thistle"              "thistle1"             "thistle2"            
## [628] "thistle3"             "thistle4"             "tomato"              
## [631] "tomato1"              "tomato2"              "tomato3"             
## [634] "tomato4"              "turquoise"            "turquoise1"          
## [637] "turquoise2"           "turquoise3"           "turquoise4"          
## [640] "violet"               "violetred"            "violetred1"          
## [643] "violetred2"           "violetred3"           "violetred4"          
## [646] "wheat"                "wheat1"               "wheat2"              
## [649] "wheat3"               "wheat4"               "whitesmoke"          
## [652] "yellow"               "yellow1"              "yellow2"             
## [655] "yellow3"              "yellow4"              "yellowgreen"

Within the geom_point function you can also change the symbol type (pch), the size of the symbol (size), and the transparency of the symbol (alpha)

p + geom_point(color = "red", pch = 12, size = 6, alpha = 1)

Using aes within the geom_point function allows you to use the above options and apply them across several variable values.

Essentially there is a bit of a dynamic vs. static situation here.

p + geom_point(aes(color = continent, shape = continent, size = lifeexp))

Change shape, color, size to be mapped to variables

So here the size of the point is determined by lifexp, and the color and shape of the dot are determined by the value for continent

You can also combine the use of an aes call with the use of options outside of an aes call.

p + geom_point(aes(color = continent), size = 3, pch = 3)

This allows you to both apply specific options to various values and change the overall appearance to all values.

Exercise 1

  1. Start with the ggplot() function using the gm data.

  2. Create an aesthetic mapping of gdpPercap to the x-axis and total_perthou to the y-axis.

  3. Add points to the plot: Make the points size 3, use pch = 25, and map continent onto the aesthetics of the point

  4. Use a scale_x_reverse scale for the x-axis.


Adding to your plot

p <- ggplot(gm, aes(gdpPercap, lifeexp)) + scale_x_log10()
p

Add in a smoothing line to better understand the relationships in your data. Smoothing line defaults to using the loess method.

p + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Adding a smoothing line

Like in geom_point(), you can change the options within geom_smooth. Here we can change the method to a linear model (lm), Choose not to display confidence intervals (se), change the line width (lwd) to 2, and the line color (col) to red.

p <- p + geom_point() + geom_smooth(lwd = 2, se = FALSE, method = "lm", color = "red")

# You can also combine this with changing the look of your data points
p + geom_point(aes(color = continent))

Faceting

Facets divide a plot into subplots based off of the values of a variable.

p <- ggplot(gm, aes(gdpPercap, lifeexp)) + scale_x_log10()

#To use facets, you use the function facet wrap.
p + geom_line() + facet_wrap(~continent)

p + geom_line() + facet_wrap(~country)

Here we will use geom_line to create line graphs Watch out when using this to make sure you aren’t breaking things up too much. Facet wraps allow for options as well. ncol provides the number of columns you want to use to display the graphs.

p + geom_line() + facet_wrap(~continent, ncol = 5)

Saving plots

ggsave(file = "gdp_lifeexp.png")
## Saving 7 x 5 in image

However, we may want to add some smoothing lines to each facet and change to geom_point, etc.

pfinal <- p + geom_point() + geom_smooth() + facet_wrap(~continent, ncol = 1)
pfinal
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Can save as a pdf and other formats.

ggsave(pfinal, file = "finalplot.pdf", width = 5, height = 15)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Filtering your facets

p <- ggplot(filter(gm, year >= 1997), aes(gdpPercap, lifeexp)) + scale_x_log10()
p

p + geom_point() + facet_wrap(~year)

Exercise 2

  1. Make a scatter plot of lifeexp on the y-axis against year on the x.
  2. Make a series of small multiples faceting on continent.
  3. Add a fitted curve, smooth or lm, with and without facets. Bonus: using geom_line() and and aesthetic mapping country to group=, make a “spaghetti plot”, showing semitransparent lines connected for each country, faceted by continent. Add a smoothed loess curve with a thick (lwd=3) line with no standard error stripe. Reduce the opacity (alpha=) of the individual black lines. Don’t show Oceania countries (that is,filter() the data where continent != "Oceania" before you plot it).

One categorical variable, one continuous variable.

Country vs. deaths Gender vs. lifeexp etc, Bar, Boxplot, dotplot, violin

X = categorical, Y = continuous

expression by nutrient

p <- ggplot(brauer, aes(x = nutrient, y = expression))
p

Lets how it looks with points

p + geom_point()

Add transparency to the points

p + geom_point(alpha = 1/4)

# Add a bit of stagger to the points
p + geom_jitter()

# And some transparency
p + geom_jitter(alpha = 1/4)

A boxplot may make a bit more sense.

p + geom_boxplot()

#add jitter to a boxplot
p + geom_boxplot() + geom_jitter(alpha = 1/2)

ORDER MATTERS

boxplot on top instead

p + geom_jitter() + geom_boxplot()

#We should go ahead and make the box plot stand out a bit.
p + geom_jitter() + geom_boxplot(color = "red", fill = "blue")

We can also do a violin plot as well.

p + geom_violin()

  p + 
    geom_violin() + 
    geom_jitter(aes(color = nutrient), alpha = 1/4)

using the pipe

brauer %>% 
  ggplot(aes(x = nutrient, y = expression)) + 
  geom_violin() + 
  geom_jitter(aes(color = nutrient), alpha = 1/4)

Using Filter to narrow things down Also quite useful for handling Nas

#filter()

Reorder allows for you to reorder the axis labels

p <- ggplot(brauer, aes(x = reorder(nutrient, rate), y = expression))
p 

p + geom_boxplot()

Exercise 3

  1. Make a jittered strip plot of GDP per capita against continent.

  2. Make a box plot of GDP per capita against continent.

3.Using a log10 y-axis scale, overlay semitransparent jittered points on top of box plots, where outlying points are colored.

  1. BONUS: Try to reorder the continents on the x-axis by GDP per capita. Why isn’t this working as expected? See ?reorder for clues.

Univariate plots: histograms, density, bar, dotplot

histograms

p <- ggplot(brauer, aes(expression))
p <- p + geom_histogram()
  p 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

choose different number of bins

p + geom_histogram(bins = 15)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

p + geom_histogram(binwidth = 2.5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

p + geom_histogram(binwidth = .2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

p + geom_histogram(breaks = c(-5, -2, 0, 2, 5))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

density plots

p <- ggplot(brauer, aes(expression))
  p + geom_density()

color univariate plots

  p + geom_histogram(aes(color = nutrient))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

  p + geom_histogram(aes(fill = nutrient), position = "identity")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#Alpha provides the transparency of each layer.  
  p <- p + geom_histogram(aes(fill = nutrient), position = "identity", alpha = 1/3)
  p
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#can facet these histograms
  p <- p + facet_wrap(~nutrient)
  p  
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#we can look at this same chart as a density curve
  p <- ggplot(brauer, aes(expression))
    
  p + geom_density(aes(color = nutrient, fill = nutrient), alpha = 1/3, size = 1)

  p + geom_density(aes(color = nutrient, fill = nutrient)) + facet_wrap(~nutrient)

Exercise 4

  1. Plot a histogram of GDP Per Capita.

  2. Do the same but use a log10 x-axis.

  3. Still on the log10 x-axis scale, try a density plot mapping continent to the fill of each density distribution, and reduce the opacity.

  4. Still on the log10 x-axis scale, make a histogram faceted by continent and filled by continent. Facet with a single column (see ?facet_wrap for help).

  5. Save this figure to a 6x10 PDF file.

Changing the look of your plots

Adding Reference Lines

p <- ggplot(gm, aes(x = total_perthou, y = lifeexp))
p

p <- p + geom_point(aes(color = death_cat), size = 3)
p
## Warning: Removed 165 rows containing missing values (geom_point).

p <- p + geom_vline(xintercept = c(550, 725), size = 2, color = c("firebrick", "blue"), alpha = 1/4)
p
## Warning: Removed 165 rows containing missing values (geom_point).

Let us go ahead and build up a nice base plot to use.

p <- ggplot(gm, aes(gdpPercap, lifeexp))
p <- p + scale_x_log10() + 
     aes(color = continent) +
     geom_point() + 
     geom_smooth(se = FALSE, lwd = 2)

#Changing the Title
p <- p + ggtitle("Life Expectancy vs. GDP by Continent")
p
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

title <- ggtitle("Life Expectancy vs. GDP by Continent")

Changing the X and Y axis labels

p <- p + xlab("GDP Per Capita (USD)") + ylab("Life Expectancy (years)")
p
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

xlabs <- xlab("GDP Per Capita (USD)")
ylabs <- ylab("Life Expectancy (years)")

To add a caption

p <- p + labs(caption = "(Data from gapminder.csv)")
p
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

caps <- labs(caption = "(Data from gapminder.csv)")

Using theme() you can control many different ggplot() elements.

#?theme()
new_theme <- theme(legend.position = "bottom", 
        axis.text = element_text(color = "red"),
        panel.background = element_rect(fill = "mistyrose2"),
        plot.title = element_text(size = 20, color = "orange"),                                  
        axis.title = element_text(size = 14, color = "sienna")
        )

p + new_theme
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

# Themes to speed up formatting
p <- ggplot(gm, aes(gdpPercap, lifeexp))
p <- p + scale_x_log10() + 
  aes(color = continent) +
  geom_point() + 
  geom_smooth(se = FALSE, lwd = 2)
p
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + title + caps + xlabs + ylabs
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p <- ggplot(gm, aes(gdpPercap, lifeexp))
p <- p + scale_x_log10() + 
  aes(color = continent) +
  geom_point() + 
  geom_smooth(se = FALSE, lwd = 2)

p
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_bw() + theme(legend.position = "none")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_classic()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

The ggthemes package has built in themes to mimic certain publications, etc.

#install.packages("ggthemes")
library(ggthemes)
p + theme_excel() + scale_color_excel()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_gdocs() + scale_color_gdocs()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_stata() + scale_color_stata()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_wsj() + scale_color_wsj()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_economist()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

p + theme_fivethirtyeight()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'